package br.com.jhd.aba.aplicacao.controladores;

import java.util.List;

import org.vraptor.annotations.Component;
import org.vraptor.annotations.Out;
import org.vraptor.plugin.hibernate.Validate;
import org.vraptor.scope.ScopeType;

import br.com.jhd.aba.aplicacao.servicos.IUsuarioApplicationService;
import br.com.jhd.aba.dominio.entidades.Usuario;

@Component("usuario")
public class UsuarioController {

	private final IUsuarioApplicationService usuarioAppService;
	@Out(scope=ScopeType.SESSION)
	private Usuario usuarioLogado = new Usuario();
	private List<Usuario> usuarios;
	private Usuario usuario;
	private String urlRetorno;

	public UsuarioController(IUsuarioApplicationService usuarioAppService){
		this.usuarioAppService = usuarioAppService;
	}

	public Usuario getUsuarioLogado() {
		return usuarioLogado;
	}
	
	public Usuario getUsuario() {
		return usuario;
	}
	
	public List<Usuario> getUsuarios() {
		return usuarios;
	}
	
	public String getUrlRetorno() {
		return urlRetorno;
	}
	
	public String efetuaLogin(Usuario usuario) {
		this.usuarioLogado = usuarioAppService.buscarPorLoginSenha(usuario);

		if (this.usuarioLogado != null) {
			this.usuarioLogado = usuario;
			return "ok";
		} else {
			return "invalid";
		}
	}

	public void efetuaLogout() {
		this.usuario = null;
	}

	@Validate(params={"usuario"})
	public String grava(Usuario usuario) {
		this.urlRetorno = "usuario.consultaUsuario.logic";
		//alteracao
		if (usuario.getCodigo() != null) {
			this.usuario = usuarioAppService.buscarPorId(usuario);
			usuarioAppService.gravar(usuario);
			return "ok";
		//insercao
		} else {
			Long retorno = usuarioAppService.buscarPorLogin(usuario);

			if ( retorno > 0 ) {
				this.usuario = usuario;
				return "existe";
			} else if ( retorno < 0 ) {
				this.usuario = usuario;
				return "invalid";
			} else {
				usuarioAppService.gravar(usuario);
				return "ok";
			}
		}
	}

	public void carrega(Usuario usuario) {
		this.usuario = usuarioAppService.buscarPorId(usuario);
	}
	
	public void consultaUsuario() {}
	
	public void cadastroUsuario() {}
	
	public void listagemUsuario(Usuario usuario) {
		this.usuario = usuario;
		this.usuarios = usuarioAppService.buscarPorFiltro(usuario);
	}
	
	public void remove(Usuario usuario, String urlRetorno) {
		this.urlRetorno = urlRetorno.replaceAll("_", "&");
		usuarioAppService.apagar(usuario);
	}

}
